package com.etc.dao;
/**
 * 歌曲Dao接口
 * @author nxlnian
 * @author Amber
 *
 */

import java.util.List;
import java.util.Map;

import com.etc.entity.MusicInfo;
import com.etc.entity.Singger;

public interface MusicDao {
	/**
	 * 根据歌曲id获得歌曲对象
	 * @param musicId
	 * @return
	 */
	MusicInfo findByid(Integer userId);
	/**
	 * 根据用户id获取收藏歌曲集合
	 * @param musicId
	 * @return
	 */
	List<MusicInfo> findByUesrId(Integer musicId);
	
	/**
	 * 电台歌单id获取所有歌曲
	 * @param broadcastingStationId
	 * @return
	 */
	List<MusicInfo> findBysongSleetId(Integer broadcastingStationId);
	// ===================================== admin 操作 dao ===============================
	
	/**
	 * 添加音乐
	 * @param musicInfo
	 * @return
	 */
	int addSong(MusicInfo musicInfo);
	
	/**
	 * 修改歌曲信息
	 * @param musicInfo
	 * @return
	 */
	int modifySingerInfo(MusicInfo musicInfo);
	
	/**
	 * 根据歌曲ID删除歌曲
	 * @return
	 */
	int deleteSongById(Integer musicId);
	
	/**
	 * 根据歌曲编号查询歌曲信息
	 * @param musicId
	 * @return
	 */
	MusicInfo findSongInfoById(Integer musicId);
	
	/**
	 * 根据歌曲名进行模糊查询
	 * @param musicName
	 * @return
	 */
	List<MusicInfo> findSongInfoInfoBySongName(String musicName,int pageNum,int pageSize);
	
	/**
	 * 统计根据模糊查询的总记录数
	 * @param musicName
	 * @return
	 */
	int countBySongName(String musicName);
	
	/**
	 * 查询所有记录中各个风格的点赞数
	 * @return
	 */
	List<Map<String, Object>> findLikeCountGrounpByStyle();

	/**
	 * 根据用户id获取用户收藏歌曲
	 * @param userId
	 * @return
	 */
	List<MusicInfo> findMusicById(Integer userId);
	/**
	 * 根据歌手id查询歌曲列表及分页
	 * @param singgerId
	 * @return
	 */
	List<MusicInfo> findMusicBySinggerId(Integer singgerId,int pageNum,int pageSize);
	/**
	 * 根据歌手id查询歌曲总数
	 * @param singgerId
	 * @return
	 */
	int countMusicBySinggerId(Integer singgerId);
	
	/**
	 * 根据歌单查询歌曲
	 * @param BroadcastingStationId
	 * @return
	 */
	List<MusicInfo> findByBroadcastingStationId(int BroadcastingStationId);


	/**


   /**

	 * 查找所有的歌曲信息
	 * @return
	 */
	List<MusicInfo> findAll();
	
	/**
	 * 根据关键字模糊查询歌曲
	 * @param keyWord
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	List<MusicInfo> findByKeyWord(String keyWord,int pageNum,int pageSize);
	/**
	 * 根据关键字模糊查询歌曲总数
	 * @param keyWord
	 * @return
	 */
	int countMusicByKeyWord(String keyWord);
   /**
	 * 通过语言名查找发布时间近半年的歌曲
	 * @param languagesName
	 * @return
	 */
	List<MusicInfo> findHalfYearMusic(String languagesName);

	
	/**
	 * 通过传递的情况来查找歌曲信息（用于排行榜）
	 * @return
	 */
	List<MusicInfo> findListByCondition(Integer condition);
	
	/**
	 * 查找每个风格的音乐数量
	 * @return
	 */
	List<Map<String, Object>> findStyleCount();

}



